/**
 * 该文件用于对 axios 做统一封装
 */

import axios from "axios";
import { ElMessage } from "element-plus";
import { getToken } from "./auth";
// console.log("ENV", import.meta.env);
// console.log("MODE", import.meta.env.MODE);

// 创建 axios 实例
const request = axios.create({
  // 基础接口前缀地址
  //    特点：
  //        请求时不以协议开头，则会拼接该地址
  //    好处：
  //        1. 统一配置，减少后续劳动
  baseURL: import.meta.env.VITE_API_BASEURL,
  // import.meta.env.MODE === "development"
  //   ? "http://127.0.0.1:8001"
  //   : import.meta.env.MODE === "stg"
  //   ? "https://stg.com"
  //   : import.meta.env.MODE === "uat"
  //   ? "https://uat.com"
  //   : "https://www.baidu.com",

  // 超时时间，单位为毫秒
  timeout: 1000 * 10,

  // 请求头
  headers: {
    x: 10,
    y: 20,
    // Token 的携带不能直接在这里操作，应该该数据会发生变化（登录前后）
    // Authorization: getToken(),
  },
});

// 请求拦截器
//    1. 请求发出之前对请求配置做一些处理
request.interceptors.request.use(
  /**
   *
   * @param {*} config - 请求配置
   * @returns 将 config 返回出去，让请求发出
   */
  (config) => {
    // console.log("请求拦截器 config", config);
    const token = getToken();
    if (token) {
      config.headers.Authorization = token;
    }

    return config;
  }
);

// 响应拦截器
//    1. 请求响应回来到 .then 的回调函数执行之前做一些处理
request.interceptors.response.use(
  /**
   * http状态码为 2xx、304 时触发
   * @param {*} response - axios Response 对象
   * @returns
   */
  (response) => {
    // console.log("响应1", response);
    // 获取接口返回数据
    const result = response.data;
    // 判断业务状态码是否成功
    if (result.code !== 1000) {
      // 失败
      ElMessage.error(result.message || "网络异常，请稍后重试！！！");
      return Promise.reject(result);
    }

    // 业务成功
    return result.data;
  },
  /**
   * http状态码非 2xx 时触发
   * @param {*} error - axios Error 对象
   * @returns
   */
  (error) => {
    // console.log("响应2", error);
    return Promise.reject(error);
  }
);

export default request;
